//
//  CZHomeTableViewController.swift
//  weibo
//
//  Created by Apple on 16/3/8.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
import SVProgressHUD
//  单元格重用标记
private let identifier = "homeCellIdentifier"
class CZHomeTableViewController: CZVistorTableViewController {

    //  懒加载viewmode
    private lazy var statusListViewModel: CZStatusListViewModel = CZStatusListViewModel()
    private lazy var pullUpView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView()
        //  显示样式
        view.activityIndicatorViewStyle = .WhiteLarge
        //  设置颜色
        view.color = UIColor.redColor()
        //  设置大小
        view.sizeToFit()
        return view
    }()
    
    private lazy var czRefreshControl: CZRefreshControl = CZRefreshControl()
    
    private lazy var tipLabel: UILabel = {
        let label = UILabel()
        label.backgroundColor = UIColor.orangeColor()
        label.textColor = UIColor.whiteColor()
        label.font = UIFont.systemFontOfSize(12)
        label.hidden = true
        //  设置frame
        if let navCtrl = self.navigationController {
            let navigationBarMaxY = CGRectGetMaxY(navCtrl.navigationBar.frame)
            label.frame = CGRect(x: 0, y: navigationBarMaxY - 35, width: self.view.frame.width, height: 35)
        }

        label.textAlignment = .Center
        return label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
 //       SVProgressHUD.showErrorWithStatus("error")
//        SVProgressHUD.showInfoWithStatus("inof")
 //       SVProgressHUD.showSuccessWithStatus("success")
        
        if !userLogin {
            visitorView?.setVisitorInfo(nil, message: nil)
        } else {
            setUpUI()
            //  注册cell
            setupTableView()
            //  加载微博数据
            loadData()
        }
        //  如果是UITableViewController 可以使用
//        self.refreshControl = UIRefreshControl()
        //  也可以使用
//        tableView.addSubview(UIRefreshControl())
        //  但是tableview只能使用
//        tableView.addSubview(UIRefreshControl())
    }


    //  设置UI
    private func setUpUI() {
        
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(imgName: "navigationbar_friendsearch", target: self, action: "leftButtonClick")
        navigationItem.rightBarButtonItem = UIBarButtonItem(imgName: "navigationbar_pop", target: self, action: "rightButtonClick")
        
        
    }
    
    //  注册cell
    private func setupTableView() {
        //  设置tableview无分割线的样式
        tableView.separatorStyle = .None
        
        tableView.registerClass(CZStatusTableViewCell.self, forCellReuseIdentifier: identifier)
        //  设置行高,自动计算行高，会根据contentview的最大y值来设置行高
        tableView.rowHeight = UITableViewAutomaticDimension
        //  设置预估行高
        tableView.estimatedRowHeight = 200
        
        tableView.tableFooterView = pullUpView
        
        //  系统的刷新控件
//        let refreshControl = UIRefreshControl()
//        refreshControl.addTarget(self, action: "test:", forControlEvents: .ValueChanged)
//        tableView.addSubview(refreshControl)
//        

        czRefreshControl.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        tableView.addSubview(czRefreshControl)

        
        
    }
    
    func test(refreshControl: CZRefreshControl) {
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue()) { () -> Void in
            refreshControl.endRefreshing()
            print("结束刷新")
        }
    }
    
  
    // MARK:    点击事件
    @objc private func leftButtonClick() {
        print("左侧点击")
        
        //  进入临时控制器
        let vc = CZTempViewController()
        navigationController?.pushViewController(vc, animated: true)

    }
    
    @objc private func rightButtonClick() {
        print("右侧点击")
    }
    

}

//  UITableViewDelegate & UITableViewDelegate
extension CZHomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList?.count ?? 0
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath) as! CZStatusTableViewCell
        cell.statusViewModel = statusListViewModel.statusList![indexPath.row]
//        cell.textLabel?.text = statusList![indexPath.row].user?.screen_name
//        cell.detailTextLabel?.text = statusList![indexPath.row].text
      
        return cell
    }
    //  将要显示的cell
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        //  如果上拉加载没有执行动画，并且滚动到最后一个cell，执行加载上拉刷新操作，防止重复执行
        if !pullUpView.isAnimating() && indexPath.row == statusListViewModel.statusList!.count - 1 {
            print("已经是最后一条数据了")
            pullUpView.startAnimating()
            loadData()
            
        }
        
    }
}

//  加载首页数据
extension CZHomeTableViewController {

    //  数据加载完成停止动画
    private func endLoadData() {
        pullUpView.stopAnimating()
        czRefreshControl.endRefreshing()
    }
    
    @objc private func loadData() {
        //  根据上拉加载动画判断是否执行上拉加载操作，如果执行动画为true则执行上拉加载，否则不是
        SVProgressHUD.show()
        statusListViewModel.loadData(pullUpView.isAnimating()) { (isSuccess, message) -> () in
            SVProgressHUD.dismiss()
            if isSuccess {
                //  如果是下拉加载才显示tip动画，也就是上拉加载的动画没有开始
                if !self.pullUpView.isAnimating() {
                    self.showTipAnimation(message)
                }
                
                self.tableView.reloadData()
                
            } else {
                SVProgressHUD.showErrorWithStatus("网络请求失败")
            }
            //  数据请求完成，停止动画
            self.endLoadData()
        }
    }
    //  显示tip文本动画
    private func showTipAnimation(message: String) {
        //  如果显示说明在执行动画，则不在继续执行
        if tipLabel.hidden == false {
            return
        }
        
        //  设置显示的文本
        tipLabel.text = message
        if tipLabel.superview == nil {
            if let navCtrl = self.navigationController {
                navCtrl.view.insertSubview(tipLabel, belowSubview: navCtrl.navigationBar)
            }
        }
        //  显示文本
        self.tipLabel.hidden = false
        
        UIView.animateWithDuration(1, animations: { () -> Void in
            self.tipLabel.transform = CGAffineTransformMakeTranslation(0, self.tipLabel.frame.height)
        }) { (_) -> Void in
            
            UIView.animateWithDuration(1, animations: { () -> Void in
                self.tipLabel.transform = CGAffineTransformIdentity
                }, completion: { (_) -> Void in
                self.tipLabel.hidden = true
            })
            
        }

            
    
    }
}

